#!/bin/bash

# 关闭脚本配置
APP_NAME="todo-sync"
PID_FILE="/var/run/todo-sync.pid"
LOG_FILE="/var/log/todo-sync.log"
SHUTDOWN_LOG="/var/log/todo-sync-shutdown.log"

# 记录关闭开始时间
echo "$(date): 开始停止 $APP_NAME 服务..." >> "$SHUTDOWN_LOG"

# 方法1: 通过 PID 文件停止进程
if [ -f "$PID_FILE" ]; then
    PID=$(cat "$PID_FILE")
    if ps -p "$PID" > /dev/null 2>&1; then
        echo "$(date): 通过 PID 文件找到进程 $PID，正在停止..." >> "$SHUTDOWN_LOG"
        kill "$PID"
        
        # 等待进程结束，最多30秒
        TIMEOUT=30
        while [ $TIMEOUT -gt 0 ] && ps -p "$PID" > /dev/null 2>&1; do
            sleep 1
            TIMEOUT=$((TIMEOUT-1))
        done
        
        # 如果进程还在，强制杀死
        if ps -p "$PID" > /dev/null 2>&1; then
            echo "$(date): 正常停止失败，强制杀死进程 $PID..." >> "$SHUTDOWN_LOG"
            kill -9 "$PID"
            sleep 2
        fi
        
        # 确认进程已停止
        if ps -p "$PID" > /dev/null 2>&1; then
            echo "$(date): 错误: 无法停止进程 $PID" >> "$SHUTDOWN_LOG"
            exit 1
        else
            echo "$(date): 成功停止进程 $PID" >> "$SHUTDOWN_LOG"
            rm -f "$PID_FILE"
        fi
    else
        echo "$(date): 警告: PID 文件存在但进程 $PID 未运行" >> "$SHUTDOWN_LOG"
        rm -f "$PID_FILE"
    fi
else
    echo "$(date): 警告: 未找到 PID 文件 $PID_FILE" >> "$SHUTDOWN_LOG"
fi

